1 /*
2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021
3 License:   [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License].
4 Authors: Marcelo S. N. Mancini
5 
6 	Copyright Marcelo S. N. Mancini 2018 - 2021.
7 Distributed under the CC BY-4.0 License.
8    (See accompanying file LICENSE.txt or copy at
9 	https://creativecommons.org/licenses/by/4.0/
10 */
11 module hip.hipaudio.audiosource;
12 import hip.hipaudio.audioclip : HipAudioClip;
13 import hip.hipaudio.audio;
14 public import hip.api.audio.audiosource;
15 
16 import hip.math.vector;
17 
18 /** 
19 *   Wraps properties for the AudioPlayer. The closest graphical represetantion
20 *   to that would be the Material class, but for Audios.
21 *
22 */
23 public class HipAudioSource : AHipAudioSource
24 {
25     public:
26     //Functions
27         void attachToPosition(){}
28         void attachOnDestroy(){}
29         override float getProgress(){return time/length;}
30         override void pullStreamData(){}
31         override HipAudioBufferWrapper* getFreeBuffer(){return null;}
32 
33         final void sendAvailableBuffer(HipAudioBuffer buffer)
34         {
35             (cast(HipAudioClip)clip).setBufferAvailable(buffer);
36         }
37 
38         override HipAudioSource clean()
39         {
40             loop = false;
41             isPlaying = false;
42             length = 0;
43             position = [0,0,0];
44             clip = null;
45             return this;
46         }
47 }
48 
49 /** 
50  * Unpacks the HipAudioBufferAPI into a HipAudioBuffer. 
51  *  ClipSize with size different than 0 is used for streamed audio
52  */
53 HipAudioBuffer getBufferFromAPI(IHipAudioClip clip, size_t clipSize = 0)
54 {
55     import hip.util.memory;
56     if(clipSize == 0)
57         clipSize = clip.getClipSize();
58     HipAudioBufferAPI* api = clip._getBufferAPI(clip.getClipData(), cast(uint)clipSize);
59     HipAudioBuffer buffer = *cast(HipAudioBuffer*)api;
60     freeGCMemory(api);
61     return buffer;
62 }